package com.tedu.api;

import org.junit.Test;

/**
 * Java万物皆对象--》真的是面向对象---》不全是【把大数据基本类型】
 * 对象【类--创建对象，调用属性、方法】
 * 8个基本数据类型----本质类型---类----包装类【对象，通过点调用方法、属性】
 *包装不可以修改：final修饰类，无法继承
 * 八个包装类的方法基本是通用
 *    int           Integer          java.lang    继承Number
 *    long          Long             java.lang    继承Number
 *    double        Double           java.lang    继承Number
 *    short         Short            java.lang    继承Number
 *    float         Float            java.lang    继承Number
 *    byte          Byte             java.lang    继承Number
 *    char          Character        java.lang    继承Object
 *    boolean       Boolean          java.lang    继承Object
 */
public class Packing {
    @Test
    public void test(){
        int i=1;   //不是面向对象
        Integer a=new Integer(i);//面向对象
        a.toString();
    }
    /**
     * 包装类API
     * 抽象类 Number  父类：Integer、Long、Double、 Short、 Float、 Byte
     * xxxValue抽象方法：把包装转换成基本数据类型的方法
     * intValue方法       返回int变量
     * longValue方法      返回long变量
     * doubleValue方法    返回double变量
     * shortValue方法     返回short变量
     * floatValue方法     返回float变量
     * byteValue方法       返回byte变量
     * 需求:把以上的六个数据类型，转换包装，输出基本数据类型
      */
    @Test
    public void testValue(){
        //int打包---包装类---取出---从包装类获取基础数据类型
        Integer i=new Integer("123");
        int is=i.intValue();   //包装类     类型转换为int返回

        Integer t=new Integer("123");
        int si=t.intValue();

        System.out.println("Integer包装类："+(is==si));
        //==  对比   值
        System.out.println("Integer包装类："+i.equals(t));
        //.equals  对比对象   确定对象是否有值【包装类--实际值】   有实际值  对比
        //其他5个数据类型包装类--打包 拆包
        Long a=new Long("1");
        long a1=a.longValue();
        System.out.println(a1);
        Double b=new Double("2");
        double b1=b.doubleValue();
        System.out.println("b1");
    }

    /**
     * xxxValue抽象方法----------静态方法【打包，拆包】
     * 打包:对应包装类中存在对应类型
     * 拆包：对应包装类，类型，取出
     */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf("123");  //类名点出来：静态方法【Number抽象类】
        double d=Double.valueOf("123.123");
        boolean b=Boolean.valueOf("true");
        char c=Character.valueOf('i');
        //float f=Float.valueOf("c");
        short s=Short.valueOf("j");
        long l=Long.valueOf("c");
        byte b1=Byte.valueOf("d");
    }

    /**
     * parseXXX    静态方法  【重点:Servlet JavaWeb】
     * 作用：将字符串转换为对应的类型：
     * 参数传递----字符串---给字符串转换为对应数据类型
     * 注意：字符串随便写，不可以随便解析成对应类型
     */
    @Test
    public void testParseXXX(){
        //1.把基本数据类型转换为字符串方法       2  转换为字符串
        String s=String.valueOf("2");
        //2.把字符串转换为基础数据类型方法      需要解析出来
       // String s2="2x";
       // System.out.println(s2+"打桩");
       // int i=Integer.parseInt(s2);
        //需求：把s3-s6，正确解析出来
        String s3="123.123";
        float f=Float.parseFloat(s3);
        String s4="true";
        boolean b=Boolean.parseBoolean(s4);
        String s5="10L";  //无法加L表示long!符合三种类型:Integer、Byte、Short
       // long l=Long.parseLong(s5);
        String s6="a";   //Character  字符类型包装类：无法解析
        /* byte byt=Byte.parseByte(s6);
        System.out.println(byt);*/
        //总结：1.字符类，无法正确的解析成对应类型，不存在char字符
        //     2.字面量L/F，认为这是一个字符串，解析失败
    }
/**
 * 包装类   自动拆装箱
 * JDK1.5  新特性  2004
 * JDK1.5之前没有自动拆装箱
 */
@Test
    public void test01(){
    //JDK1.5之前
    Integer in =Integer.valueOf("1");//输入类型转换为Integer
    int i=in.intValue(); //把包装好的类型，基础数据类型取出
    //JDK1.5之后   定义方法编译器认可，并非JVM虚拟机认可！
    Integer it=1;//装箱
    int is=it; //拆箱
    //自动拆装箱实际上，把拆装箱与装箱的步骤交给idea执行
}

}
